package com.example.springboottest.util;

import org.apache.commons.net.ftp.FTPClient;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

/**
 * @Author LiuYiShuo
 * @DATE 2023/4/27 17:19
 * @Version 1.0
 * @Description：使用ftp的方式跨网段发送文件到另一个服务器上
 */
public class FtpUtils {

    /**
     *ftp上传单个文件
     * @param hostname 服务器地址
     * @param port 端口号
     * @param username 用户名
     * @param password 密码
     * @param uploadFilePath 上传文件路径(包括文件名)
     * @param destPath ftp上传目录
     */
    public static void ftpUploadFile(String hostname,int port,String username,String password,String uploadFilePath,String destPath){
        FTPClient ftp = new FTPClient();
        System.out.println("准备连接到ftp");
        try {
            //连接
            ftp.connect(hostname, port);

            //登录
            boolean loginS = ftp.login(username, password);
            if (!loginS) {
                System.out.println("ftp登录失败，用户名或密码错误");
                return;
            }else{
                System.out.println("ftp登录成功");
            }

            // 获取本地文件并上传
            String file = uploadFilePath;
            FileInputStream input = new FileInputStream(file);
            //跳转目录
            ftp.changeWorkingDirectory(destPath);
            //必须要设置以二进制的方式传输文件
            ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
            //被动模式
            ftp.enterLocalPassiveMode();
            file = new String(file.getBytes("GBK"),"iso-8859-1");

            if (!ftp.storeFile(new File(file).getName(), input)) {
                //获取上传失败的原因
                System.out.println("失败，服务器返回:" + ftp.getReplyString());
            } else {
                System.out.println("文件:" + new File(file).getName() + " 上传成功");
            }
            input.close();
            ftp.logout();
        } catch (IOException e) {
            System.out.println("ftp连接失败");
        }
    }

}
